home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Apple Game Sprockets / NetSprocket 1.1.1 SDK / NetSprocket Release Notes < prev    next >
Encoding:
Text File  |  1998-11-30  |  10.2 KB  |  218 lines  |  [ttro/ttxt]

  1. NetSprocket 1.1.1b4 Release Notes
  2. ---------------------------------
  3.  
  4. This beta build of NetSprocket fixes all known crashing bugs in NetSprocket.
  5. Please test your applications on this version, and report all bugs using the
  6. bug reporter on Apple Developer Connection:
  7.  
  8. http://developer.apple.com/bugreporter/index.html
  9.  
  10.  
  11. Release Components
  12. ------------------
  13.  
  14. NetSprocket Release Notes     - this file
  15. NetSprocket.h                    - the header file to compile with.
  16. NetSprocketStubLib                           - the stub lib for your development environment
  17. NetSprocketLib                   - release version of the library
  18. NetSprocketDebugLib           - debugging version of the library
  19.  
  20. WARNING: don't place both the debugging and non-debugging versions of the
  21. library in the search path or you will not be sure which version you will be
  22. using.
  23.  
  24. CRITICAL NOTE:  a rather severe error has been found in the documentation for NetSprocket.  The original "Apple Game Sprockets Guide 1.0" documentation said that you should call NSpReleaseAddressReference() to free the memory used by address references.  You must make sure that you only use this on address references that were allocated by NetSprocket (such as NSpDoModalJoinDialog().  This is especially critical when using address references generated by the NSpConvertOTAddrToAddressReference() function.  If you allocate your own OTAddress structions and then convert them to NSpAddressReferences you should not use NSpReleaseAddressReference() to free this memory.  Release your OTAddress allocations as you normally would.
  25.  
  26. Dependencies
  27. ------------
  28.  
  29. NetSprocket requires OpenTransport version 1.1.1 or later.
  30.  
  31. NetSprocket68K requires the CFM-68K 4.0 update, available from Apple
  32. Software Updates.
  33.  
  34. NetSprocket requires the latest Universal Headers -- version 2.1.2 or later.
  35. The latest version of the Universal Headers can be found on the Mac OS SDK
  36. CD-ROMs or on Apple Developer Connection.  <http://developer.apple.com/sdk/>
  37.  
  38.  
  39. Changes from 1.1 to 1.1.1
  40. -------------------------
  41.  
  42. Changes:
  43.  
  44.   -  NetSprocket 1.1.1 is one library rather than being separate binaries for
  45.      CFM68K and PowerPC.
  46.  
  47.   -  If you specify a NULL string for the "type" parameter to NSpDoModalJoinDialog,
  48.      NetSprocket will use the game ID (passed to NSpInitialize) to search for games
  49.      on the AppleTalk network.  This matches the behavior for NSpGame_Host. You may
  50.      also pass in a zero length pascal string for the same behavior.  The pascal
  51.      string method also worked on version 1.1.
  52.  
  53.  
  54. Bug Fixes:
  55.  
  56.   -  NetSprocket now includes the resources ('dlgx', 400) and ('dlgx', 403)
  57.      so that it won't interfere with application dialogs.
  58.  
  59.   -  Through the power of C++ all previous NetSprocket builds subversively
  60.      had many debug asserts in them.  This has been corrected.  This should
  61.      fix a number of problems.
  62.  
  63.   -  NetSprocket's dialogs would occasionally truncate one or more of the
  64.      text fields.  This has been corrected.
  65.  
  66.   -  All callback functions were receiving invalid game references. Also, the 
  67.      callback function would be called inside of NSpGame_Host before the game
  68.      reference was filled in.  Both problems are fixed.
  69.  
  70.   -  A couple of rare instances where NetSprocket could leak memory were corrected.
  71.  
  72.  
  73. Known Issues:
  74.  
  75.   -  Host renegotiation does not work.
  76.  
  77.   -  NetSprocket 1.0 does not implement Round-Trip-Time or throughput functions.
  78.      You can implement your own RTT and thruput functions on top of the
  79.      NetSprocket API yourself, though.
  80.  
  81.   -  If you attempt to connect to an invalid OTAddress, NetSprocket will block inside
  82.      OpenTransport until the connection times out (~2 minutes).
  83.  
  84.  
  85.  
  86. NetSprocket 1.1 changes
  87. -----------------------
  88.  
  89. Changes:
  90.   -  This version now supports CFM68K as well.
  91.  
  92.   -  The NSpPlayerLeftMessage now includes a field for the name of the player who
  93.      left the game.  Previously, you only got the playerID, but since the player
  94.      was done there was no way to perform a GetInfo to get their name.
  95.     
  96.      CAVEAT I:  Be advised that this is a new feature to NetSprocket 1.1 and is
  97.      NOT backwards compatible with pre-1.1 builds.  If you use this field you must
  98.      make sure that your are using NetSprocket 1.1 or newer.  You can get the version
  99.      number with the NSpGetVersion() call.
  100.  
  101.         In short, make sure that everyone in the game is using 1.1 or newer if you
  102.      plan to use this field of the structure.
  103.  
  104. Bug fixes:
  105.   -  Bugs that disallowed the creation of more than one game object at a time
  106.      have been fixed.  You are now only limited by other system resources,
  107.      such as memory or networking ports.  Keep in mind if you try to host
  108.      multiple games that you will get an error back if you try to host multiple
  109.      games with the same game name (for AppleTalk) or with the same port (for IP).
  110.     
  111.   -   A significant problem was found under heavy flow (traffic) conditions
  112.          that could cause data to be delivered out of order.  This has been fixed.
  113.  
  114.  
  115. What's coming?
  116. --------------
  117. Due to the significant changes that have taken place at Apple recently, we
  118. have been forced to cut back out engineering efforts in many areas, including
  119. NetSprocket.  The Win95 version will not be ready as planned, and we will
  120. be making changes only in modest increments.
  121.  
  122. NetSprocket (and the other Sprockets) are still supported, though, and we'll 
  123. continue making improvements as needed.
  124.  
  125.  
  126.  
  127. Getting the Most out of NetSprocket
  128. -----------------------------------
  129.  
  130. There is a new version of NetSprocketTest that should provide a better example
  131. of how to effectively use NetSprocket.  The most important thing to note is how
  132. NetSprocket messages are handled both synchronously and asynchronously.  This
  133. method prevents problems where user actions, such as a mouse-down, could
  134. prevent the main event loop from calling NSpMessage_Get, and thereby cause
  135. a buffer overflow problem.
  136.  
  137. The number one problem we've seen with people using NetSprocket is apps running
  138. out of memory.  The reason this happens is that NetSprocket presents a 
  139. message API to the application.  If you have, say, a 50K message, NetSprocket
  140. doesn't hand that message to the client application until all 50K are received.
  141. This model makes NetSprocket much more susceptible to low memory problems that
  142. other, data-oriented, networking APIs.  There are three things you can
  143. do to minimize this kind of problem.
  144.     1.  Use small messages ( < 1K) as often as is practical
  145.     2.     Give NetSprocket as much memory as you can spare
  146.     3.  Use the async message hander
  147.     
  148. NetSprocket will still function if you don't do these things, but end user
  149. conditions will be much more likely to cause your app problems.
  150.  
  151. You should always check return values from NetSprocket functions.  Failure to
  152. do so is reckless, and will only cause you and your customers headaches.
  153.  
  154. If the user unchecks the "play on this machine" button, the hosting machine
  155. must not send any messages to other players.  The host machine only acts to 
  156. route messages between the various players -- while it can act on messages
  157. that are copied to it, it cannot directly message other players.  If the host 
  158. needs to send messages to other players, the host should be implemented as a
  159. special kind of player.  If you need to disable the "play on this machine"
  160. button, create a custom host dialog box that does not provide that option.
  161.  
  162. When connecting to a game for the first time, a client application is not 
  163. permitted to send messages to other players until it receives the join
  164. approved message.  The application should spin waiting for a join approved,
  165. join denied, or game terminated message.  If you do receive a join denied or 
  166. game terminated message, you are not permitted to send messages to any other
  167. players in the game.  In actuality, the connection to the host has already
  168. been terminated.  Future versions of NetSprocket may return control to the 
  169. client app before the connection is completely established, so assuming you
  170. can send messages immediately after the NSpGame_Join call has returned is an 
  171. error.
  172.  
  173. To get the optimal performance out of NetSprocket, design your game to send
  174. "Normal" messages that contain less than 550 bytes of data.  This allows
  175. NetSprocket to use datagram-level delivery for both TCP/IP and AppleTalk. 
  176. Using "Registered" messages can cause a 2-50% network performance degradation,
  177. depending on a number of factors, including network bandwidth, utilization,
  178. message size, and send frequency.
  179.  
  180. All messages, except ones sent from a player to himself, are sent through the
  181. host.  Therefore, the host is one "hop" from any other player, and two non-host
  182. players are always two "hops" apart.
  183.  
  184. Sending a message to a group is not as efficient as sending to everyone in the
  185. game, or to a single player.  It is usually more efficient than sending to each
  186. individual in the group separately.
  187.  
  188. You CAN NOT send messages at VBL (or any other interrupt) time with NetSprocket
  189. 1.0.  You should schedule a deferred system task, or just wait until system
  190. task time before sending.  You CAN however, call NSpMessage_Get at interrupt
  191. time.  We generally recommend against all interrupt-time calls to the Game
  192. Sprockets.
  193.  
  194. The number of players in a NetSprocket game is limited only by memory (and
  195. networking resources, such as available ports).  If you expect to handle lots
  196. of players (14+), you need to make sure you give NetSprocket sufficient memory
  197. and queue elements when you initialize it.  If you get send failed or memory
  198. error message from NetSprocket, try giving it more memory.
  199.  
  200. If you have a situation where your game has players whose network throughput is
  201. greatly disparate, you need to make sure you don't choke the slow person.  For
  202. example, if you have 4 players on AppleTalk over Ethernet, and you have a fifth
  203. player join the game over a 28.8k PPP connection, and your fast machines are
  204. sending messages 30 times a second each, you're going to quickly gag the
  205. newcomer with too much data, and the host will simply not be able to deliver
  206. messages as quickly as you generate them.  The newcomer will be disconnected
  207. after approximately 20 messages have been queued up, waiting for flow control
  208. to lift before delivering them.  You can avoid this type of problem by
  209. throttling down your game's send rate to allow the newcomer to participate. 
  210. You can also avoid it by sending "Junk" messages instead of Normal.
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.